In designing complex circuitry such as application-specific integrated circuits ("ASICs"), the designed logic of such circuitry is typically simulated in a computer using data and computer programs to thereby test the viability and accurate performance of the designed logic. By doing so, design flaws can be detected prior to expending the time and engineering and financial resources required to physically build the circuitry. To simulate circuitry using data and computer programs, the circuitry is described in a hardware description language ("HDL") to form a model. One example of an HDL is the Verilog HDL processed by the Cadence Verilog hardware simulator available from Cadence Design Systems, Inc. of San Jose, Calif. The HDL model of a circuit typically includes a description of components of the state of the circuit and a description of the behavior of the circuit. The behavior of the circuit generally includes inter-relationships between various components of the state of the circuit.
A hardware simulator then uses the HDL model of the circuitry to simulate the circuitry. The hardware simulator is a computer process which accepts data defining signals to be placed on certain parts of the simulated circuit and then changes the state of the circuit in accordance with the signals. The certain parts of the circuit include, for example, terminals, lines, or registers of the simulated circuit.
Circuitry which is simulated in this manner is becoming increasingly complex reducing significantly the feasibility of simulation of such circuitry on a single computer processor. Factors which contribute significantly to such reduction in feasibility in simulations of particularly complex circuits include intolerable amounts of time and computer resources which are required for such complex simulations to execute. For example, simulating a particularly complex circuit in a single computer may require more memory than is available within the single computer. Distribution of circuit simulations over computer networks is one solution. Distributing over constituent computers of a computer network a model simulating a complex circuit generally involves partitioning the model into discrete model parts and distributing those parts among the constituent computers of the computer network.
Distributing a circuit simulation over multiple computers of a computer network increases the complexity of such a simulation significantly. For example, each of the distributed model parts must generally know something about other distributed model parts, at least to the extent that the distributed model parts interact. In addition, since each of the distributed model parts executes independently of other distributed model parts, some mechanism must generally be provided to synchronize interaction between the distributed model parts. For example, if a component of the state of a first model part is dependent upon other components of the state of the first model part and components of the state of a model simulation part, execution of the first and second model parts must generally be synchronized to ensure accuracy of the state simulated by the first model part.
To distribute parts of a complex simulation of a particularly complex circuit, special purpose software is sometimes constructed to process communication and interaction between the distributed parts of the simulation and to coordinate and synchronize execution of the distributed parts of the simulation. Such software can execute particularly efficiently since design verification engineers, when constructing the software, can customize and optimize the software according to the particular requirements of the complex simulation. However, such software suffers from a significant disadvantage. Such software generally requires a substantial amount of time and effort to construct and is generally a complex and difficult task. As a result, constructing such software represents a substantial portion of the time required to simulate a particularly complex circuit and to verify the design of the circuit. In addition, such software is typically non-extensible, i.e., cannot be readily adapted to simulate a different circuit. In other words, once such software is constructed to orchestrate execution of a complex, distributed simulation, small changes in the design of the circuit generally require that the software be substantially rewritten altogether to orchestrate execution of the changed, complex, distributed simulation.
An alternative to distributing execution of a simulation of a particularly complex circuit is to simplify the simulation to mimic the designed behavior of the circuit rather than requiring that the simulation to simulate each component of the particular design of the circuit. Since the simulation is simplified and does not simulate each component of the particular design of the circuit, execution of the simulation within a single computer may be feasible. This approach suffers from the disadvantage that care must be taken to ensure that the behavior mimicked by the simulation is, in fact, accurately representative of the behavior of the circuit as designed. Thus, in essence, the engineer who designs and implements the simulation must determine to an appreciable degree the precise behavior of the circuit as designed. In general, it is preferable that determining the precise behavior of the circuit is done by the simulation and not by the engineer designing and implementing the simulation. In addition, if the design of the circuit is changed, perhaps in response to design flaws discovered during the simulation of the circuit, the behavior of the circuit must again be determined and mimicked by a simplified simulation.
Thus, a satisfactory mechanism by which parts of a simulation of a circuit can be distributed among multiple computers of a computer network and by which such distributed model parts can be coordinated and synchronized persists as a need in the simulation and verification of circuit designs.